////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: ParameterParser V1.1.4
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  modsagenv1.cpp
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include "modsagenv1.h"
#include "parametersetmanager.h"

MODSAGENV1_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Default Constructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
chromatixSAGenV1ArrayTypeClass::chromatixSAGenV1ArrayTypeClass(
    const CHAR* name)
    : ParameterModule(name, MAJOR, MINOR, PATCH, 0, 0, 0, 0)
{
    PARAMETER_INITIALIZE(SymbolTableID);
    PARAMETER_INITIALIZE(module_version);
    PARAMETER_INITIALIZE(SAGenV1DataCount);
    PARAMETER_INITIALIZE(SAGenV1DataID);
    PARAMETER_INITIALIZE(SAGenV1Data);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Constructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
chromatixSAGenV1ArrayTypeClass::chromatixSAGenV1ArrayTypeClass(
    const CHAR* name,
    UINT32 modeId,
    UINT16 mode,
    UINT16 subMode,
    UINT32 group)
    : ParameterModule(name, MAJOR, MINOR, PATCH, modeId, mode, subMode, group)
{
    PARAMETER_INITIALIZE(SymbolTableID);
    PARAMETER_INITIALIZE(module_version);
    PARAMETER_INITIALIZE(SAGenV1Data);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Destructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
chromatixSAGenV1ArrayTypeClass::~chromatixSAGenV1ArrayTypeClass()
{
    UnloadchromatixSAGenV1ArrayType(this);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// GetName
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const CHAR* chromatixSAGenV1ArrayTypeClass::GetName(
    const CHAR* type)
{
    const CHAR* name = type;
    CHAR temp[ParameterFileSymbolTableEntry::TYPE_LEN + 1];
    if (PARAMETER_STRCMP(type, ParameterFileSymbolTableEntry::GetType(temp, "SAGenV1DataArray")) == 0)
    {
        name = "SAGenV1DataArray";
    }
    return name;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixSAGenV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixSAGenV1ArrayTypeClass::LoadchromatixSAGenV1Type(
    ParameterFileSymbolTableEntry* entry,
    chromatixSAGenV1Type* structure)
{
    BOOL result = TRUE;

    // Reading structure->Description from the symbol table
    {
        UINT32 DescriptionCount = 0;
        result = result && entry->ReadUInt32(&DescriptionCount);
        ParameterFileSymbolTableEntry* pointerEntry1 = entry->Table->ReadPointerEntry(entry);
        result = result && pointerEntry1 != NULL;
        structure->Description = NULL;
        if (result)
        {
            pointerEntry1->ReadString(&structure->Description, DescriptionCount);
        }
    }
    result = result && awbglobalelements::awbglobalelementsClass::LoadmoduleIDType(entry, &structure->moduleID);
    result = result && entry->ReadInt32(&structure->enableFlag);
    result = result && entry->ReadFloat(&structure->weight);

    // Reading structure->detectionZone from the symbol table
    {
        result = result && entry->ReadUInt32(&structure->detectionZoneCount);
        structure->detectionZoneID = entry->ID;
        ParameterFileSymbolTableEntry* pointerEntry1 = entry->Table->ReadPointerEntry(entry);
        result = result && pointerEntry1 != NULL;
        if (result)
        {
            structure->detectionZone   = PARAMETER_NEW awbglobalelements::awbZoneDefineType[structure->detectionZoneCount];
        }
        if (!result || structure->detectionZone == NULL)
        {
            structure->detectionZoneCount = 0;
        }
        for (UINT32 i = 0; result && i < structure->detectionZoneCount; i++)
        {
            result = result && awbglobalelements::awbglobalelementsClass::LoadawbZoneDefineType(pointerEntry1, &structure->detectionZone[i]);
        }
    }
    structure->configenceCmpt = (awbglobalelements::awbSAConfidenceCmptType)entry->ReadEnum(&result);

    // Reading structure->confidenceLevel from the symbol table
    {
        result = result && entry->ReadUInt32(&structure->confidenceLevelCount);
        structure->confidenceLevelID = entry->ID;
        ParameterFileSymbolTableEntry* pointerEntry1 = entry->Table->ReadPointerEntry(entry);
        result = result && pointerEntry1 != NULL;
        if (result)
        {
            structure->confidenceLevel   = PARAMETER_NEW awbglobalelements::awbSAConfidenceDataType[structure->confidenceLevelCount];
        }
        if (!result || structure->confidenceLevel == NULL)
        {
            structure->confidenceLevelCount = 0;
        }
        for (UINT32 i = 0; result && i < structure->confidenceLevelCount; i++)
        {
            result = result && awbglobalelements::awbglobalelementsClass::LoadawbSAConfidenceDataType(pointerEntry1, &structure->confidenceLevel[i]);
        }
    }
    result = result && awbglobalelements::awbglobalelementsClass::LoadawbSATargetDataType(entry, &structure->targetAdjustment);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixSAGenV1ArrayType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixSAGenV1ArrayTypeClass::LoadchromatixSAGenV1ArrayType(
    ParameterFileSymbolTableEntry* entry,
    chromatixSAGenV1ArrayType* structure)
{
    BOOL result = TRUE;
    result = result && Loadmodule_versionStruct(entry, &structure->module_version);

    // Reading structure->SAGenV1Data from the symbol table
    {
        result = result && entry->ReadUInt32(&structure->SAGenV1DataCount);
        structure->SAGenV1DataID = entry->ID;
        ParameterFileSymbolTableEntry* pointerEntry1 = entry->Table->ReadPointerEntry(entry);
        result = result && pointerEntry1 != NULL;
        if (result)
        {
            structure->SAGenV1Data   = PARAMETER_NEW chromatixSAGenV1Type[structure->SAGenV1DataCount];
        }
        if (!result || structure->SAGenV1Data == NULL)
        {
            structure->SAGenV1DataCount = 0;
        }
        for (UINT32 i = 0; result && i < structure->SAGenV1DataCount; i++)
        {
            result = result && LoadchromatixSAGenV1Type(pointerEntry1, &structure->SAGenV1Data[i]);
        }
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load module_versionStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixSAGenV1ArrayTypeClass::Loadmodule_versionStruct(
    ParameterFileSymbolTableEntry* entry,
    chromatixSAGenV1ArrayType::module_versionStruct* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->major_revision);
    result = result && entry->ReadInt32(&structure->minor_revision);
    result = result && entry->ReadInt32(&structure->incr_revision);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixSAGenV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixSAGenV1ArrayTypeClass::UnloadchromatixSAGenV1Type(
    chromatixSAGenV1Type* structure)
{
    PARAMETER_DELETE[] structure->Description;
    for (UINT32 i = 0; i < structure->detectionZoneCount; i++)
    {
        awbglobalelements::awbglobalelementsClass::UnloadawbZoneDefineType(&structure->detectionZone[i]);
    }
    PARAMETER_DELETE[] structure->detectionZone;
    for (UINT32 i = 0; i < structure->confidenceLevelCount; i++)
    {
        awbglobalelements::awbglobalelementsClass::UnloadawbSAConfidenceDataType(&structure->confidenceLevel[i]);
    }
    PARAMETER_DELETE[] structure->confidenceLevel;
    awbglobalelements::awbglobalelementsClass::UnloadawbSATargetDataType(&structure->targetAdjustment);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixSAGenV1ArrayType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixSAGenV1ArrayTypeClass::UnloadchromatixSAGenV1ArrayType(
    chromatixSAGenV1ArrayType* structure)
{
    for (UINT32 i = 0; i < structure->SAGenV1DataCount; i++)
    {
        UnloadchromatixSAGenV1Type(&structure->SAGenV1Data[i]);
    }
    PARAMETER_DELETE[] structure->SAGenV1Data;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Parse symbol table entry, and return a new object
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ParameterModule* chromatixSAGenV1ArrayTypeClass::Parse(
    ParameterSetManager* manager,
    ParameterFileSymbolTableEntry* entry) const
{
    chromatixSAGenV1ArrayTypeClass* cls = NULL;

    if (PARAMETER_STRCMP(Type, entry->Type) == 0 && Major == entry->Major &&
        Minor == entry->Minor && Patch == entry->Patch)
    {
        cls = PARAMETER_NEW chromatixSAGenV1ArrayTypeClass(GetName(entry->Type), 
            entry->ModeId, entry->Mode, entry->SubMode, entry->Group);
        if (cls != NULL)
        {
            BOOL result = TRUE;

            cls->SymbolTableID = entry->ID;
            cls->ID            = entry->ID;

            result = result && LoadchromatixSAGenV1ArrayType(entry, cls);

            if (!result)
            {
                PARAMETER_DELETE cls;
                cls = NULL;
            }
        }
    }
    return (ParameterModule*)cls;
}


MODSAGENV1_NAMESPACE_END
